実践アクションスクリプト

ここでは、実際に使えそうな色々な技を示します。

 

(0)準備

スプライトにアクションスクリプトを書く方法の代表的なものには、

メイン画面でスプライトを選択し、“スクリプトを編集”でスプライトを書き込む方法があります。

スプライトの形や色が変わらない場合は、この方法でスプライトの振る舞いを書ききることができます。しかし、本格的アニメを作るには、スプライトの色や形を変える必要が出てきます。

例えば、

(1)   電球は“消えたり”“点いたり”で色が変わる。

(2)   物は近づけば大きくなり、遠ざかれば小さくなる

(3)   物に火が点けば炎がでる。

などです。

この様な複雑な動きを実現するには、メインの“スクリプトを編集”で作成するスクリプトで、

シンボルリストの“スプライト編集”で作成するタイムラインのスクリプトを操作して細かな動きを実現します。

 

例0:マウスボタンの操作(pressまたはrelease)で青丸と黄丸に変身するスプライトを作ります。as00.swf

step1(スプライトの準備):シンボルリストに青丸(m.bmp)と黄丸(f.bmp)とスプライトを用意します。スプライトにm.bmpf.bmpをセットします(上図左)。

step2(スプライトのフレームアクション):上図左でスプライトにフレームアクションを挿入します。

step2_1:スプライトのフレームアクションの第一フレームと第二フレームをキーフレームにし、そのスクリプトにstop();を書き込みます。下図参照。

(解説:suzuka(flash)はフレームアクションのフレームを左から右に繰り返しスキャンし実行します。放っておくと、処理が右に流れますが、stop()を書き込んでおくと、そのフレームを実行してstopして止まります)

 

step2_2:青丸と黄丸をアクションフレームに対応させて配置します。上の図では、青丸m.bmpを、第一フレームに、黄丸f.bmpを第二フレームにセットしています。

step3:(上図のピンク部をWクリックし、メインに戻る)メインに戻って、スプライトをメインにドラッグし、スプライトのスクリプトを作成します。

 

この様にすると、ボタンを押したら(on(prass))、第一フレームに飛び(gotoAndStop(1))、ボタンを放したら(on(release))第二フレームへ飛ぶ(gotoAndStop(2))ようになります(gotoAndPlayでもよい)。gotoAndPlay(..)の引数は、スプライトのフレームアクションのフレーム番号です。

(技1)移動オブジェクトを撃て

(1−1)左から右に青い丸が動きます。これをクリックすると爆発します。

移動オブジェクトmと爆発オブジェクトからなるスプライトを作ります。メインでそのスプライトを選択し、スクリプトを上図のように書きます。

スプライトのオブジェクト名はmにしておきます。

(1)オブジェクトがクリックされたらmのフレームアクションの2フレーム目へ飛べ。

(2)_xに1を加え、mを右に動かせ

次にスプライトを見てみましょう。

 

フレームアクションの、第一と第十一フレームにはstop();が書かれていて、ここで止まります。爆発fはトウィ―ンで大きな黄色○から小さな黄色○に変化させています。また、上図メインのf.bmpm.bmpの表示位置(タイムライン上の赤部)にも注意して下さい。

このスプライトは最初フレーム1でstop();していますが、オブジェクトがクリックされるとgotoAndPlay(2)で二フレーム目、即ち爆発図が表示されます。

注意:スプライト編集時に、mとfを編集キャンバスにおきますが、この時同じ場所に置かないとm上で爆発しないので注意して下さい。

 

ass1.swfass1.swf

 

(1−2)繰り返し青丸を登場させよう

上の例は青丸が1回出て終わりでした。今度は、何度もでるように変えましょう。

xという変数を使って丸を移動させ、xが右端までいくと、青丸を左端に移動させる処理を入れました。_xはオブジェクトがクリックされるまでは毎回+5され、クリックされた後は変わらないようにしています。

スプライトは、(1−1)と同じです。

(注:この技は、スプライトをアクションスクリプトで自由行動させ、スプライト内のタイムラインで絵的に爆発を表示しています)

 

ass2.swfass2.swf

 

(技2)矢印キーで移動可能な砲台から、スペースキーで弾を撃ちます。

この例は、メインのフレームアクションで砲台を動かし、弾のスプライトのフレームアクションで弾を移動させています。

オレンジ色の四角が砲台です。矢印キーで動きます(その前にウインドウをクリックする必要がある場合があります)。スペースキーで弾がでます。

http://isvalid.jp/actionscriptLab/game/action/hiyo04.html参照)

メインのフレームアクションには、

第一フレームk=true;(上図)

第二フレーム

//台が止まっているときに弾を撃つ時のスクリプト。

if (Key.isDown(Key.SPACE) && k == true)

              m.gotoAndPlay(2);

k = false;

//台の移動。

if (Key.isDown(Key.UP)) {

              b.gotoAndStop(2);

              b._y -= 5;

} else if (Key.isDown(Key.DOWN)) {

              b.gotoAndStop(2);

              b._y += 5;

} else if (Key.isDown(Key.RIGHT)) {

              b.gotoAndStop(2);

              b._x += 5;

} else if (Key.isDown(Key.LEFT)) {

              b.gotoAndStop(2);

              b._x -= 5;

}

第三フレーム:gotoAndPlay(2);

です。

kは弾が動いているかどうかを示す変数です。

第二フレームが中心で、スペースキーが押されると、mの第二フレームが起動されます。

第三フレームは第二フレームへの戻りを行います。

 

弾のスプライトも以下のように、フレームアクションを使っています。

フレームアクションの中身は、

第一フレーム:上の、

_root.k= true;

stop();

第二フレーム

this._x = _parent.b._x;

this._y = _parent.b._y;

これは、弾を砲台の位置に移動させるものです、_parentは上層を示し、この場合_rootです。

第三フレーム

if (this._y < 300) {

              this._x = this._x;

              this._y += 15;

} else {

              this.gotoAndStop(2);

}

で、ウインドウ内は下に移動し、ウインドウを出たら第二フレームへ戻る。

第四フレーム

this.gotoAndPlay(_currentframe - 1);

で、一つ前のフレーム(第三)に戻れ。

これで弾が動きます。

ass3.swfass3.swf

 

(技3)日時の表示

日時を出してくれる関数の紹介です。テキストボックスの乗ったスプライトを用意し、メインに入れます。

(テキストボックスでは、ダイナミックテキストにし、_ゴシックフォントにすること)

スプライトのアクションスクリプト全体は以下の通りです。

onClipEvent (load) {

              day = ["", "", "", "", "", "", ""];

              t = "";

}

onClipEvent (enterFrame) {

              dateobj = new Date();

              // -----

              t = dateobj.getFullYear()+"/";

              // -----

              if (dateobj.getMonth()+1<10)         t += "0";

              t += dateobj.getMonth()+1+"/";

              // -----

              if (dateobj.getDate()<10)  t += "0";

              t += dateobj.getDate()+"/";

              // 曜日 -----

              t += "("+day[dateobj.getDay()]+") ";

              // 時間 -----

              t += dateobj.getHours()+":";

              // -----

              if (dateobj.getMinutes()<10)          t += "0";

              t += dateobj.getMinutes()+":";

              // -----

              if (dateobj.getSeconds()<10)           t += "0";

              t += dateobj.getSeconds();             

}

 

 

ass4.swfass4.swf

 

(技4)オブジェクト間の通信

2つのオブジェクト間で交信する方法を示します。四角bが右に動き、_xが100になると、mのフレームアクション(第二フレーム)を起動します。

今度はmの_xが100になるとbをストップさせます。

メインは何の変哲もありません。

sのフレームアクション:

第一フレーム:stop();

第二フレーム:

_x++;

if(_x==100) _root.b.gotoAndStop(1);

第三フレーム:gotoAndPlay(2);

です。

一方bのフレームアクション:

第一フレーム:

_x++;

if(_x==100) _root.m.gotoAndPlay(2);

第二フレーム:gotoAndPlay(1);

である。

ass5.swfass5.swf